package top.whysu.gps.service.navigation;

import org.springframework.transaction.annotation.Transactional;
import top.whysu.gps.constant.DataDictionary;
import top.whysu.gps.dto.navigation.CurrentRouteAddModifyDTO;
import top.whysu.gps.po.navigation.RouteCurrentPO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 当前航线
 */
public interface RouteCurrentService {
    /**
     * 获取当前航线数据
     */
    List<RouteCurrentPO> selectList();

    /**
     * 添加/编辑航线
     */
    @Transactional
    BigDecimal wholeAddModify(CurrentRouteAddModifyDTO addModifyDTO);

    /**
     * 删除航线
     *
     * @param id 当前航线表的id
     */
    @Transactional
    void deleteCurrentRoute(BigDecimal id);

    /**
     * 设定当前航线
     *
     * @param routIdList 需要设定的航线集合
     */
    @Transactional
    void wholeSetCurrentRoute(List<BigDecimal> routIdList);

    /**
     * 批量删除当前航线
     *
     * @param deleteIdList 需要批量删除的航线集合
     */
    @Transactional
    void batchDeleteCurrentRoute(List<BigDecimal> deleteIdList);

    /**
     * 漂浮模式，锚停模式默认坐标设置为空的情况下，需要发送的坐标
     *
     * 查询航线表最后一条“已发送”或最新一条“等待发送”对应坐标。
     */
    RouteCurrentPO getWanderCoordinate();

    /**
     * 修改对应坐标的发送状态
     *
     * @param routeId    航线id
     * @param routeState 发送状态{@link DataDictionary.RouteState}
     */
    @Transactional
    void updateNavigationState(BigDecimal routeId, Integer routeState);

    /**
     * 批量插入
     *
     * @param routeList 集合
     */
    void batchInsert(List<RouteCurrentPO> routeList);

    /**
     * 获取航线漂浮模式/船舶模式/单点循环模式选择的点
     */
    RouteCurrentPO getSelectedPoint();
}
